#define HYPERPRIVOP_GET_RR 0x10
#define HYPERPRIVOP_SET_RR 0x11
#define HYPERPRIVOP_SET_KR 0x12
-#define HYPERPRIVOP_MAX 0x12
+#define HYPERPRIVOP_FC 0x13
+#define HYPERPRIVOP_GET_CPUID 0x14
+#define HYPERPRIVOP_GET_PMD 0x15
+#define HYPERPRIVOP_GET_EFLAG 0x16
+#define HYPERPRIVOP_SET_EFLAG 0x17
+#define HYPERPRIVOP_MAX 0x17
static const char * const hyperpriv_str[HYPERPRIVOP_MAX+1] = {
0, "rfi", "rsm.dt", "ssm.dt", "cover", "itc.d", "itc.i", "ssm.i",
"=ivr", "=tpr", "tpr=", "eoi", "itm=", "thash", "ptc.ga", "itr.d",
- "=rr", "rr=", "kr="
+ "=rr", "rr=", "kr=", "fc", "=cpuid", "=pmd", "=ar.eflg", "ar.eflg="
};
unsigned long slow_hyperpriv_cnt[HYPERPRIVOP_MAX+1] = { 0 };
case HYPERPRIVOP_SET_KR:
(void)vcpu_set_ar(v,regs->r8,regs->r9);
return 1;
+ case HYPERPRIVOP_FC:
+ (void)vcpu_fc(v,regs->r8);
+ return 1;
+ case HYPERPRIVOP_GET_CPUID:
+ (void)vcpu_get_cpuid(v,regs->r8,&val);
+ regs->r8 = val;
+ return 1;
+ case HYPERPRIVOP_GET_PMD:
+ (void)vcpu_get_pmd(v,regs->r8,&val);
+ regs->r8 = val;
+ return 1;
+ case HYPERPRIVOP_GET_EFLAG:
+ (void)vcpu_get_ar(v,24,&val);
+ regs->r8 = val;
+ return 1;
+ case HYPERPRIVOP_SET_EFLAG:
+ (void)vcpu_set_ar(v,24,regs->r8);
+ return 1;
}
return 0;
}
};
// FIXME: should use snprintf to ensure no buffer overflow
-int dump_privop_counts(char *buf)
+static int dump_privop_counts(char *buf)
{
int i, j;
UINT64 sum = 0;
return s - buf;
}
-int zero_privop_counts(char *buf)
+static int zero_privop_counts(char *buf)
{
int i, j;
char *s = buf;
v->overflow++;;
}
-int dump_privop_addrs(char *buf)
+static int dump_privop_addrs(char *buf)
{
int i,j;
char *s = buf;
return s - buf;
}
-void zero_privop_addrs(void)
+static void zero_privop_addrs(void)
{
int i,j;
for (i = 0; i < PRIVOP_COUNT_NINSTS; i++) {
extern unsigned long pal_halt_light_count;
extern unsigned long context_switch_count;
-int dump_misc_stats(char *buf)
+static int dump_misc_stats(char *buf)
{
char *s = buf;
s += sprintf(s,"Virtual TR translations: %ld\n",tr_translate_count);
return s - buf;
}
-void zero_misc_stats(void)
+static void zero_misc_stats(void)
{
dtlb_translate_count = 0;
tr_translate_count = 0;
context_switch_count = 0;
}
-int dump_hyperprivop_counts(char *buf)
+static int dump_hyperprivop_counts(char *buf)
{
int i;
char *s = buf;
return s - buf;
}
-void zero_hyperprivop_counts(void)
+static void zero_hyperprivop_counts(void)
{
int i;
for (i = 0; i <= HYPERPRIVOP_MAX; i++) slow_hyperpriv_cnt[i] = 0;